package biz

import (
	"context"
)

type SysUser struct {
	UserId       int32  `json:"user_id"`
	UserName     string `json:"user_name"`     // 用户账号
	NickName     string `json:"nick_name"`     // 用户姓名
	UserPassword string `json:"user_password"` // 用户密码
	ProvinceCode string `json:"province_code"` // 省
	CityCode     string `json:"city_code"`     // 市
	AreaCode     string `json:"area_code"`     // 区
	Status       string `json:"status"`        // enable:正常，disable:禁用
	Phone        string `json:"phone"`         // 手机号
}
type UpdateUser struct {
	UserId       int32  `json:"user_id"`
	UserName     string `json:"user_name"`     // 用户账号
	NickName     string `json:"nick_name"`     // 用户姓名
	ProvinceCode string `json:"province_code"` // 省
	CityCode     string `json:"city_code"`     // 市
	AreaCode     string `json:"area_code"`     // 区
	Status       string `json:"status"`        // enable:正常，disable:禁用
	Phone        string `json:"phone"`         // 手机号
}

type SearchCondition struct {
	UserName     string `json:"user_name"`     // 用户账号
	NickName     string `json:"nick_name"`     // 用户姓名
	ProvinceCode string `json:"province_code"` // 省
	CityCode     string `json:"city_code"`     // 市
	AreaCode     string `json:"area_code"`     // 区
	Status       string `json:"status"`        // enable:正常，disable:禁用
	Phone        string `json:"phone"`         // 手机号
}

type SysUserRepo interface {
	Save(context.Context, *SysUser) error
	Update(context.Context, *UpdateUser) error
	Delete(context.Context, int32) error
	Get(context.Context, int32) (*SysUser, error)
	ListByCondition(context.Context, *SearchCondition) ([]*SysUser, error)
}

type SysUserUsecase struct {
	repo SysUserRepo
}

// NewSysUserUsecase new a SysUser usecase.
func NewSysUserUsecase(repo SysUserRepo) *SysUserUsecase {
	return &SysUserUsecase{repo: repo}
}

func (uc *SysUserUsecase) CreateSysUser(ctx context.Context, user *SysUser) error {
	return uc.repo.Save(ctx, user)
}

func (uc *SysUserUsecase) UpdateSysUser(ctx context.Context, user *UpdateUser) error {
	return uc.repo.Update(ctx, user)
}

func (uc *SysUserUsecase) DeleteSysUser(ctx context.Context, userId int32) error {
	return uc.repo.Delete(ctx, userId)
}

func (uc *SysUserUsecase) GetSysUser(ctx context.Context, userId int32) (*SysUser, error) {
	return uc.repo.Get(ctx, userId)
}

func (uc *SysUserUsecase) ListSysUser(ctx context.Context, condition *SearchCondition) ([]*SysUser, error) {
	return uc.repo.ListByCondition(ctx, condition)
}
